Technical Q&A QA1334
OpenGL Driver Monitor Decoder Ring


Q:OpenGL Driver Monitor のパラメータは実際には何を表しているのでしょうか。

A:OpenGL Driver Monitor は、グラフィックスプロセッシングユニット(GPU)の動作およびセントラルプロセッシングユニット(CPU)とのやり取りを把握する手段を提供します。「Monitors」メニューで選択した GPU についての測定値が報告され、GPU および GPU と CPU のやり取りに関連するすべての演算に適用されます。この報告は監視期間中に OpenGL を使用するすべてのアプリケーションを含みます。この情報を使って、パフォーマンスのボトルネックがそれらのアプリケーションのどこにあるか、どのデバイスがボトルネックに影響しているかを特定し、GPU と CPU の間のデータスループットを最適化できます。

パラメータドロワーからパラメータを「Driver Monitor」ウインドウのパラメータリストにドラッグすることによって、利用するパラメータを選択できます。利用可能なパラメータは GPU による実際の測定値に由来するもので、どのシナリオでもまったく同じように使用できるわけではありません。さらに、一部の測定値は他の測定値を含みます。そうしたものは、定義から明らかです。たとえば、commandBytescommand2DBytescommandGLBytes、および commandDVDBytes によって報告されるすべての測定値を含みます。以下に、OpenGL Driver Monitor で調べることのできるパラメータのリストを示します。

メモ
  • データスループットは、「Driver Monitor Preferences」で設定されている更新間隔あたりのバイト数として測定されます。したがって、標準設定の 1 秒の更新間隔では、データは 1 秒あたりのバイト数として読み取ることができます。
  • すべての時間はナノ秒単位です。したがってグラフに表示される「1 ギガナノ秒」、つまり「1G」は、特定の演算に 1 秒、つまり更新間隔が 1 秒ならば 100% の時間を消費したことを表します。更新間隔が「Preferences」で変更されている場合には、報告される値は、選ばれた更新間隔全体に対してのものとなり、1 秒間隔に正規化されません。
  • カウントは、間隔ごとに 1 回測定される値の絶対値なので、更新間隔の長さには影響されませんが、もちろん更新間隔の間に変化することもあります。
  • すべての CPU 待ち時間は、特に指定されていなければ、選択された GPU 演算の待ち時間であると仮定されます。
  • Total Command Data:commandBytes (単位:バイト)
    すべてのグラフィックスコンテキスト(2D、OpenGL、DVD)を通じて送られたバイト数。
  • 2D Command Data:command2DBytes(単位:バイト)
    2D グラフィックスコンテキストを通じて送られたバイト数。
  • OpenGL Command Data:commandGLBytes(単位:バイト)
    OpenGL コンテキストを通じて送られたバイト数。
  • DVD Command Data:commandDVDBytes(単位:バイト)
    DVD コンテキストを通じて送られたバイト数。
  • Extra OpenGL Data:dataGLBytes(単位:バイト)
    他の OpenGL コマンドトラフィックのために使われたバイト数(通常は頂点データ)。すべてのモードのすべてのドライバで使われるわけではありません。
  • Swap Data:swapBytes(単位:バイト)
    swap コマンドによって送られたバイト数。
  • AGP Data Mapped:gartMapInBytes(単位:バイト)
    AGP Graphics Address Remapping Table(GART)または同等のハードウエアにマップされたバイト数。
  • AGP Data Unmapped:gartMapOutBytes(単位:バイト)
    AGP GART(または同等のハードウエア)からアンマップされたバイト数。
  • Texture Page On Data (Non-AGP):texturePageInBytes(単位:バイト)
    テクスチャページのページインのために転送されたバイト数。AGP を通じてマップされたテクスチャあhここに表示されます。
  • Texture Page Off Data (Non-AGP):texturePageOutBytes(単位:バイト)
    テクスチャページのページオフ処理のために転送されたバイト数。ほとんどの条件下で、テクスチャはページオフされず、単純に捨てられます。システムメモリにバックアップが存在するからです。テクスチャのページオフトラフィックは通常、VRAM の圧力によって、たとえば、glCopyTexImage() によって作成されたテクスチャや、glCopyTexSubImage() または glTexSubImage() によって変更されたテクスチャなど、VRAM にしか有効なデータがないテクスチャのページオフが強制されるときに生じます。
  • Surface Page On Data (Non-AGP):surfacePageInBytes(単位:バイト)
    サーフェスのページオン処理によって転送されたバイト数。
  • Surface Page Off Data (Non-AGP):surfacePageOffBytes(単位:バイト)
    サーフェスのページオフ処理によって転送されたバイト数。
  • Textures:textureCount(数)
    GPU によって割り当てられたカーネルテクスチャの総数。
  • Surfaces:surfaceCount(数)
    GPU によって割り当てられたサーフェステクスチャの総数。
  • 2D Contexts:context2DCount(数)
    GPU で使用されている 2D コンテキストの総数。
  • OpenGL Contexts:contextGLCountcontextGLCount(数)
    GPU で使用されている OpenGL コンテキストの総数。
  • DVD Contexts:contextDVDCount(数)
    GPU で使用されている DVD コンテキストの総数。
  • 2D Context Switches:context2DSwitchCount(数)
    GPU 上の 2D コンテキストに対するコンテキストスイッチの総数。
  • OpenGL Context Switches:contextGLSwitchCount(数)
    GPU 上の OpenGL コンテキストに対するコンテキストスイッチの総数。
  • DVD Context Switches:contextDVDSwitchCount(数)
    GPU 上の DVD コンテキストに対するコンテキストスイッチの総数。
  • Buffer Swaps:bufferSwapCount(数)
    GPU によって実行されたバッファスワップ(ブリット)の総数。
  • OpenGL Data Buffers:dataBufferCount(数)
    割り当てられた追加 OpenGL データバッファの総数。
  • CPU Texture Page-on Wait:texturePageInWaitTime(ナノ秒)
    GPU がテクスチャアップロードコマンドを完了して再アップロードのために更新できるようにするのを待つ間、CPU が停止していた時間。ここで消費される時間はごくわずかです。
  • CPU Texture Page-off Wait (non-DMA):texturePageOffWaitTime(ナノ秒)
    GPU がテクスチャをページオフする前にテクスチャを変更できるアクティビティを完了するのを待つ間、CPU が停止していた時間。これはテクスチャが DMA によってではなく、CPU によってページ処理される必要がある場合にのみ適用されます。
  • CPU Texture Upload Wait (2D context only):textureWaitTime(ナノ秒)
    テクスチャのアップロードが完了してバッファを変更できるようになるのを待つ間、CPU が停止していた時間。この値は 2D コンテキストによる使用のみを追跡するもので、現在ではあまり使用されなくなっています。
  • CPU Wait for GPU:hardwareWaitTime(ナノ秒)
    何らかの理由で GPU を待機している間、CPU が停止していた時間。
  • CPU Wait to Submit Commands:hardwareSubmitWaitTime(ナノ秒)
    GPU に対する新たな一連のコマンドを発行できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait in User Code:clientGLWaitTime(ナノ秒)
    クライアント(ユーザーレベル)の OpenGL ドライバが、ハードウエアのタイムスタンプ(通常はテクスチャの変更や、フェンスの完了の待機のため)の到着を待つ間、CPU が停止していた時間。
  • CPU Wait for Free 2D Command Buffer:freeCommandBuffer2DWaitTime(ナノ秒)
    空き 2D コマンドバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free OpenGL Command Buffer:freeCommandBufferGLWaitTime(ナノ秒)
    空き OpenGL コマンドバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free DVD Command Buffer:freeCommandBufferDVDWaitTime(ナノ秒)
    空き DVD コマンドバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free OpenGL Data Buffer:freeDataBufferGLWaitTime(ナノ秒)
    空き OpenGL データバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free 2D Context Switch Buffer:freeContextBuffer2DWaitTime(ナノ秒)
    空き 2D コンテキストスイッチバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free OpenGL Context Switch Buffer:freeContextBufferGLWaitTime(ナノ秒)
    空き OpenGL コンテキストスイッチバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Free DVD Context Switch Buffer:freeContextBufferDVDWaitTime(ナノ秒)
    空き DVD コンテキストスイッチバッファが利用できるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait for Mapped AGP Buffer Removal:removeFromGARTWaitTime(ナノ秒)
    GPU が GART から削除する必要のあるバッファに対する演算を完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait for 2D Swap to Complete:swapComplete2DWaitTime(ナノ秒)
    すでに発行されていた 2D バッファスワップが完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait for OpenGL Swap to Complete:swapCompleteGLWaitTime(ナノ秒)
    すでに発行されていた OpenGL バッファスワップが完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait for DVD Swap to Complete:swapCompleteDVDWaitTime(ナノ秒)
    すでに発行されていた DVD バッファスワップが完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait for Operations to Finish:finishAll2DWaitTime(ナノ秒)
    すべての GPU 演算が完了してアイドル状態になるのを待つ間、CPU が停止していた時間。一般にこれを待つのは Windows サーバのみです。
  • CPU Wait for 2D Operations to Finish:finish2DWaitTime(ナノ秒)
    1 つのコンテキストに対して発行されたすべての 2D コマンドが完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait for OpenGL Operations to Finish:finishGLWaitTime(ナノ秒)
    1 つのコンテキストに対して発行されたすべての OpenGL コマンドが完了するのを待つ間、CPU が停止していた時間。これはほぼ、glFinish() 内で消費される時間です。
  • CPU Wait for DVD Operations to Finish:finishDVDWaitTime(ナノ秒)
    1 つのコンテキストに対して発行されたすべての DVD コマンドが完了するのを待つ間、CPU が停止していた時間。
  • CPU Wait to perform VRAM Surface Page-on:surfaceCopyInWaitTime(ナノ秒)
    GPU がアイドル状態になり、CPU がサーフェスを VRAM にページインできるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait to perform VRAM Surface Page-off:surfaceCopyOutWaitTime(ナノ秒)
    GPU がアイドル状態になり、CPU がサーフェスを VRAM からページアウトできるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait to perform Surface Read:surfaceReadLockIdleWaitTime(ナノ秒)
    GPU がアイドル状態になり、CPU がサーフェスからの読み取りを行えるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait to perform Surface Write:surfaceWriteLockIdleWaitTime(ナノ秒)
    GPU がアイドル状態になり、CPU がサーフェスへの書き込みを行えるようになるのを待つ間、CPU が停止していた時間。
  • CPU Wait to perform Surface Resize:surfaceSetShapeIdleWaitTime(ナノ秒)
    GPU がアイドル状態になり、CPU がサーフェスの寸法を変更できるようになるのを待つ間、CPU が停止していた時間。
  • Current Mapped AGP Memory:gartUsedBytes(単位:バイト)
    AGP GART にマップされた総バイト数。
  • Current Free AGP Memory:gartFreeBytes(単位:バイト)
    AGP GART 内の総空きバイト数。
  • Current AGP Memory:gartSizeBytes (単位:バイト)
    AGP GART の合計サイズ。
  • Target Minimum Mapped AGP Memory:gartCacheBytes(単位:バイト)
    ドライバが AGP GART の中へのマッピングを維持しようと試みるデータの最小量。
  • Last GPU Submission Time:submitStamp(絶対時間値)
    GPU に対して最後に発行されたタイムスタンプ。
  • Last Read GPU time:lastReadStamp(絶対時間値)
    GPU から最後に読み戻されたタイムスタンプ。

以下のパラメータはベンダ固有であり、すべてのドライバで使えるわけではありません。

  • Current Free Video Memory:vramFreeBytes(単位:バイト)
    空き VRAM の合計。
  • Current Largest Free Video Memory Block:vramLargestFree(単位:バイト)
    VRAM の連続する最大空き領域の大きさ。
  • Current Video Memory in Use:vramUsedBytes(単位:バイト)
    使用中の VRAM の合計。

[2004 年 1 月 30 日]